#pragma once
#include <string>

namespace krryn{
namespace core{
	class state;

	class state_stack{
	public:
		state &current();
		bool empty();

		void subscribe(const std::string &a_Name, state *a_State);
		void unsubscribe(const std::string &a_Name);

		void flush();
		void push(const std::string &a_Name);
		void pop();

		static state_stack &get_instance();

	private:
		state_stack();

		class impl;
		impl *m_Pimpl;
	};
};
}
